/**
 * 
 */
package beans;

import java.awt.Color;
import java.awt.Desktop;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

import javax.el.ValueExpression;
import javax.faces.component.html.HtmlColumn;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.component.html.HtmlOutputText;
import javax.faces.context.FacesContext;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.Image;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;

import logica.Cliente;
import dao.DAO;
import dao.DAOGenerico;

/**
 * @author ALEJA CHICA
 *
 */
public class ClienteBean 
{

	private int idcliente;
	private String nombrecliente;
	private String direccioncliente;
	private Integer telefono;
	private String correoelec;
	private List<Cliente> clientes;
	
	public List<Cliente> getClientes() {
		return clientes;
	}

	public void setClientes(List<Cliente> clientes) {
		this.clientes = clientes;
	}

	public int getIdcliente() {
		return this.idcliente;
	}

	public void setIdcliente(int idcliente) {
		this.idcliente = idcliente;
	}

	public String getNombrecliente() {
		return this.nombrecliente;
	}

	public void setNombrecliente(String nombrecliente) {
		this.nombrecliente = nombrecliente;
	}

	public String getDireccioncliente() {
		return this.direccioncliente;
	}

	public void setDireccioncliente(String direccioncliente) {
		this.direccioncliente = direccioncliente;
	}

	public Integer getTelefono() {
		return this.telefono;
	}

	public void setTelefono(Integer telefono) {
		this.telefono = telefono;
	}

	public String getCorreoelec() {
		return this.correoelec;
	}

	public void setCorreoelec(String correoelec) {
		this.correoelec = correoelec;
	}
	
	public String crearCliente()
	{
		
		try
		{
		
			DAO<Cliente> daoCliente= new DAOGenerico<Cliente>(Cliente.class);
			Cliente cliente= new Cliente();
			
			cliente.setNombrecliente(getNombrecliente());
			cliente.setDireccioncliente(getDireccioncliente());
			cliente.setCorreoelec(getCorreoelec());
			cliente.setTelefono(getTelefono());
		
			daoCliente.persist(cliente);;
			
			return "ini";
		}
		catch (Exception e)
		{
			return "no";
		}
		
	}
	
	public String modificarCliente()
	{
		
		try
		{
		
			DAO<Cliente> daoCliente= new DAOGenerico<Cliente>(Cliente.class);
			Cliente cliente= new Cliente();
			
			cliente.setIdcliente(this.getIdcliente());
			cliente.setNombrecliente(this.getNombrecliente());
			cliente.setDireccioncliente(this.getDireccioncliente());
			cliente.setCorreoelec(this.getCorreoelec());
			cliente.setTelefono(this.getTelefono());
		
			daoCliente.merge(cliente);
			
			return "ini";
		}
		catch (Exception e)
		{
			System.out.println("error");
			return "no";
		}
		
	}
	
	private List<Cliente> listarCliente() 
	{
		
		DAO<Cliente> daoCliente = new DAOGenerico<Cliente>(Cliente.class);
		Cliente cliente = new Cliente();
		
		return  daoCliente.findByExample(cliente);
	}
	
	public String listarClientes()
	{
		clientes=listarCliente();
		return "no";
	}
	

	private HtmlDataTable datos;

	public HtmlDataTable getDatos() 
	{
		poblarDataTable();
		return datos;
	}

	public void setDatos(HtmlDataTable datos) 
	{
		this.datos = datos;
	}
	
	
	private void poblarDataTable()
	{

		datos = new HtmlDataTable();
		datos.setValueExpression("value", createValueExpression("#{myBean.dataList}", List.class));
		datos.setVar("item");
		datos.setBgcolor("silver");	

		/*
		 * 
		 */
		HtmlColumn idclienteColumn = new HtmlColumn();
		datos.getChildren().add(idclienteColumn);
		
		HtmlOutputText idclienteOutput = new HtmlOutputText();
		idclienteOutput.setValueExpression("value", createValueExpression("#{item.idcliente}", Integer.class));
		idclienteColumn.getChildren().add(idclienteOutput);
		
		/*
		 * 
		 */
		HtmlColumn  nombreclienteColumn = new HtmlColumn();
		datos.getChildren().add(nombreclienteColumn);
		
		HtmlOutputText  nombreclienteOutput = new HtmlOutputText();
		nombreclienteOutput.setValueExpression("value", createValueExpression("#{item. nombrecliente}", String.class));
		nombreclienteColumn.getChildren().add( nombreclienteOutput);
		
		/*
		 * 
		 */
		HtmlColumn  direccionclienteColumn = new HtmlColumn();
		datos.getChildren().add(direccionclienteColumn);
		
		HtmlOutputText  direccionclienteOutput = new HtmlOutputText();
		direccionclienteOutput.setValueExpression("value", createValueExpression("#{item.direccioncliente}", String.class));
		direccionclienteColumn.getChildren().add( direccionclienteOutput);
		
		/*
		 * 
		 */
		HtmlColumn  telefonoColumn = new HtmlColumn();
		datos.getChildren().add(telefonoColumn);
		
		HtmlOutputText  telefonoOutput = new HtmlOutputText();
		telefonoOutput.setValueExpression("value", createValueExpression("#{item.telefono}", Integer.class));
		telefonoColumn.getChildren().add( telefonoOutput);
		
		/*
		 * 
		 */
		HtmlColumn  correoelecColumn = new HtmlColumn();
		datos.getChildren().add(correoelecColumn);
		
		HtmlOutputText  correoelecOutput = new HtmlOutputText();
		correoelecOutput.setValueExpression("value", createValueExpression("#{item.correoelec}", String.class));
		correoelecColumn.getChildren().add( correoelecOutput);
		
		
		
	}
	
	private ValueExpression createValueExpression(String valueExpression,Class<?> valueType)
	{
		FacesContext facesContext = FacesContext.getCurrentInstance();
		
		return facesContext.getApplication().getExpressionFactory().createValueExpression(facesContext.getELContext(),valueExpression, valueType);
	}
	
	public  String generarReporte() 
	{
		
		// step 1: creation of a document-object
		Document document = new Document();
		try {
			// step 2:
			// we create a writer
			PdfWriter.getInstance(
			// that listens to the document
					document,
					// and directs a PDF-stream to a file
					new FileOutputStream("Reporte3.pdf"));
			
			Font font=new Font(Font.COURIER, 16, Font.BOLDITALIC, Color.blue);
			
			// step 3: we open the document
			document.open();
			  Image img=Image.getInstance("images\\logo.jpg");
	          img.setAlignment(Image.ALIGN_CENTER);
	          document.add(img);
			
			// step 4: we add a table to the document
			  
	          
	          
	          
			PdfPTable table = new PdfPTable(4);
			PdfPCell cell = new PdfPCell(new Paragraph("Reporte de los Clientes de la cadena hotelera.",font));
			cell.setColspan(6);

			table.addCell(cell);

						
			for(int i=0;i< 1;i++)
			{
				table.addCell("Nombre");
				table.addCell("Direccion");
				table.addCell("Telefono");
				table.addCell("Correo Electronico");
			}
			
			
			String resu="",resu1="",resu3="";
			Integer resu2=0;
			
	    	
	    	for(int i=0; i<clientes.size(); i++)
	    	{
	    		resu=clientes.get(i).getNombrecliente();
	    		table.addCell(resu);
	    		
	    		resu1=clientes.get(i).getDireccioncliente();
	    		table.addCell(resu1+"");
	    		
	    		resu2=clientes.get(i).getTelefono();
	    		table.addCell(resu2+"");
	    		
	    		resu3=clientes.get(i).getCorreoelec();
	    		table.addCell(resu3);
	    		
	    		System.out.println("a"+resu);
	    	}
			
			document.add(table);
			
		} catch (DocumentException de) {
			System.err.println(de.getMessage());
		} catch (IOException ioe) {
			System.err.println(ioe.getMessage());
		}

		// step 5: we close the document
		document.close();
		
		Desktop d = Desktop.getDesktop();
        if(Desktop.isDesktopSupported())
        {
            
           try 
           {
        	   d.open(new File("Reporte3.pdf"));
		   } 
           catch (IOException ex) 
           {					
        	   ex.printStackTrace();
           }
        }
		return "";
	}
	

}
